Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proposal for tests architecture. #96

Closed
wants to merge 1 commit into from
Closed

Conversation

vankoven
Copy link
Contributor

No description provided.

Copy link
Contributor

@krizhanovsky krizhanovsky left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The proposal contains good list of requirements and I propose to include the list to README.md.

Meantime, the proposed redesign isn't clear for me. I see a lot of good proposals which (including the requests/responses generation callbacks) seems can be just integrated into the current framework architecture. Per client/server processes seem really a big change. It makes sense, but I don't see an answer for the most crucial questions about the framework:

  1. why it takes so much effort to develop a new test even for a developer familiar with the framework
  2. how and is it possible to rework the framework to make the tests development fast.

Let's discuss the questions in chat. Results of the PR should be added to the README.md and or requirements of #56.

doc/tests-updates.md Show resolved Hide resolved

In both frameworks every test type is implemented as unique test, so it's
required to write message integrity, fussing, workload and many other test
cases for the same situation.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I still have no idea how to easily make the test framework to split a message into different sets of skbs. Probably we can use TCP_NODELAY and write the message in different parts, but I'm not sure about bufferization on Python side. However, I believe the task is solvable in generic way.

I suppose the the message integrity and probably skb splitting can be done on deproxy side. If we need the same for Nginx tests, then we can just implement the logic as a separate class/module.

All in all, with https://www.youtube.com/watch?v=oO-FMAdjY68 and the requirements above in mind, I believe that the test framework should use OO relatively complex class inheritance for the helping functionality while the tests should just on/off necessary flags for message integrity calculation, sending in different skb and other things. I.e. the helping framework must provide as declarative API as possible and it's not so important how complex it internally is.


Heavy dependency between tests. When a new feature is added, it's added to the
test framework core and affects a lot of tests. Sometimes unpredictably and
badly.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, we had them. We need to discuss this in chat considering particular cases. There are different possibilities what happens when we're in the situation - we grow the framework that it can run many different things in future or we just keep case-specific login in the framework. Let's talk on the cases in the chat. The cases should make the framework design problems clear.

doc/tests-updates.md Show resolved Hide resolved
- RPS. - maximum rps.

- Split. - Boolean value, meaning that requests must be splited in multiple skbs.
Don't know how to implement it yet.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please have a look on pv(1). TCP_NODELAY also could be an answer.

from many source interfaces, multiple concurrent connections for each client.

- Fuzzing tests: Workload tests, but every generated messages are split into
different number of skbs.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For me it seems that the things can be done in deproxy.


When reduced number of tests is executed, only first group of tests is executed,
the full set is for first and second groups. All groups are executed in background
stability tests.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Make sense for generic case, but not so much sense if a developer changes low level logic w/o changing any features and he's curious about network operation. I propose to be able to set this in config as well as for particular tests. In this way you can run for example a particular TLS test with message integrity check and/or fuzzing (strictly speaking, skb splitting isn't a real fuzzing) at the same time some tests oriented on the low level logic have sense only with one of few options enabled.

doc/tests-updates.md Show resolved Hide resolved

TLS tests - ?

Low level TCP testing - ?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With the recent TLS changes affecting TCP transmission process we have to test TCP operation (@i-rinat has questions regarding TCP segment sized generated by Tempesta). The question will be even harder for HTTP/3. Probably ScaPy isn't a good option for this, because it'd be too tricky to generate TCP flow by hands. Probably iptables mangling and/or eBPF with usual TCP options like Nagle will suite the best. We already have something in helpers/analyzer.py and helpers/flaky.py.

doc/tests-updates.md Show resolved Hide resolved
@vankoven
Copy link
Contributor Author

The proposal was discussed and a few issues was created based on it.

@vankoven vankoven closed this Jul 26, 2019
@vankoven vankoven deleted the ik-tests-proposal branch July 26, 2019 03:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants